Computer systems typically include some form of visual output device. For example, in FIG. 1, a prior art computer system 10 includes a computer 12, a keyboard 14, a disk storage unit 16, a video display 18, and a printer 20. Of course, a computer system can include more or less components than that illustrated in computer system 10, as will be appreciated by those skilled in the art of computer design.
The computer 12 includes a central processing unit (CPU) 22, read only memory (ROM) 24, random access memory (RAM) 26, and input/output (I/O) 28. The various components 22-28 of the computer 12 are coupled together for communication by a bus system 30. As will be appreciated by those skilled in the art, the representation of the computer 12 has been highly simplified for the purposes of this discussion, but includes the fundamental components of a computer and their interconnections.
Devices such as keyboard 14, disk storage 16, video display 18, and printer are often referred to as "peripheral" devices. When coupled to the computer 12 they become part of the computer system 10. Some peripheral devices are primarily for inputting information to the computer 12, other peripheral devices are used for outputting information from the computer 12, and some computer peripherals are used for both inputting and outputting information.
The video display 18 and printer 20 are common output devices for the computer 12. Such output devices typically form temporary or permanent images to convey information to the user of the computer system 10. For example, the video display 18 will include a screen that can display character, graphical, and other types of images. Similarly, printer 20 can print (i.e., make a "hard copy") of characters, graphics, and other types of images.
Certain types of visual output devices for computer systems 10 are capable of outputting in "greyscale." What this means is that each of the pixels in the raster matrix of the output device is capable of displaying a number of tones, typically from pure light to pure dark. Most modern monochrome and color video displays, video projection units, and high-end continuous-tone black and white and color printers are capable of displaying greyscale. Older printers, blank and white monitors, and certain other types of output devices such as some LCD displays, are typically not capable of displaying in greyscale.
A number of problems present themselves when displaying characters on a computer output device. It should be noted, as used herein, that the term "character" is not limited to alphanumeric characters, but includes any form of character, number, symbol, or other coded device that can be represented or displayed on a computer output device. Some of these problems have to do with the resolution of the output device, and other problems have to do with human visual perception. By "resolution", as it is used herein, refers to the size of individual pixels of a computer output device, and the spacing between the pixels of the output device.
The problems inherent in character imaging tend to be more pronounced for small characters than for larger characters. This is because small characters are made up of fewer pixels and, therefore, even a distortion of a few pixels is readily apparent in smaller characters. Some of the distortions that may occur, particularly in these smaller characters, is unbalanced "stem" weights, the disconnection of thin features, the closing of "counters", over/under filling, and to inaccurate weighting. One of the most noticeable of these defects is unbalanced stem weights, where vertical and horizontal strokes of characters may be of varying widths due to inaccuracies caused by the character rendering process. Another very noticeable defect is the inaccurate weighting effect of small characters due to a quantization effect. In other words, adding a pixel (the "quantum") to a character stem that is only a few pixels wide can distort the "weight" given to that character, e.g. it may appear to be "bold" even when it is a normal weight character.
In FIG. 2A, the prior art problem of unbalanced stem weights is illustrated. In this instance, a lower case letter "m" is shown superimposed over a high-resolution grid 32 both in an outline form 34, and a "bitmap" form 36. By "bitmap", it is meant that a one-to-one mapping is made between data stored in the memory of the computer 12 and an image of the character to be displayed, i.e. each pixel of the output device corresponds to a bit of information stored in the computer. The outline 34 is typically provided by a parsed font program such as described in Adobe Type I format, Version 1.1, available from Adobe Systems, Inc. of Mountain View, Calif., often referred to as the "Black Book" due to the color of its cover. This character outline 34 is converted or "rendered" into the bitmap 36 by a rendering program or "renderer" available from a variety of sources, including Adobe Systems, Inc.
It should be noted in FIG. 2A that the letter "m" has already picked up some distortions by being converted from its font outline 34 to the bitmap 36. In particular, the three vertical legs or "stems" of the letter "m" are of different widths. As noted, the left stem 38a is two pixels wide, the middle stem 38b is one pixel wide, and the right stem 38c is two pixels wide.
It should be noted that while characters are often rendered on a high-resolution grid as illustrated in FIG. 2A, they must be converted into a "coarse grid" representation before they can be displayed on the output device. The resolution of the coarse grid corresponds to the resolution of the output device.
In FIG. 2B, the conversion from a high-resolution grid to a coarse grid permits the renderer to re-balance the stems. More particularly, the system uses "hints" provided by the parsed font program to stretch and then align the stems of the character to the coarse grid. As noted, in FIG. 2B, the stems 40a, 40b, and 40c are all the same width and, therefore, the unbalanced stem problem has been solved for black-and-white types of output devices.
While the prior art has solved the problem of unbalanced stem widths for black and white output devices, the problem has re-emerged for greyscale output devices. This is because greyscale output devices use a technique known as "anti-aliasing" in order to provide the illusion of smoother curves and less jagged diagonal lines. This is accomplished by varying the greyscale values of coarse grid. However, this greyscale manipulation re-introduces the problem of unbalanced stem widths to anti-aliased characters.
In FIG. 2C, the lower case letter "m" is shown against a coarse grid 42 and corresponding high-resolution grid 44. The high-resolution grid 44 is shown in only one of the cells of the coarse grid 42 so as not to confuse the drawings, although it will be appreciated that the high-resolution grid 44 is associated with all the cells of the coarse grid 42. The coarse grid and the high-resolution grid are related as follows. If the output device has 2.sup.n +1 greyscale values, each "cell" 46 of the coarse grid 42 will have 2.sup.n pixels 48. To provide a more concrete example, if 17 greyscale levels are provided from pure white to pure black, then 2.sup.4 or 16 pixels of the high-resolution grid are in each cell of the coarse grid 42. This means that the resolution of the high-resolution grid 44 is four times the resolution of the coarse grid 42. As before, the font outline 50 for the letter "m" is obtained, and a bitmap 52 is developed at the resolution of the high-resolution grid from the font outline 50 by the renderer.
In FIG. 2D, the bitmap map 52 has been converted into a greyscale "pixel map" values which can be sent to the output device. This is usually accomplished in a straightforward fashion. The number of pixels for a particular cell are counted, and this number is mapped to the greyscale level for that cell. Therefore, cells having more pixels will correspond to a darker greyscale value than cells having fewer pixels. This technique, referred to as "anti-aliasing", greatly smooths the appearance of curves and reduces the jaggedness of diagonal lines, as is well known to those skilled in the art.
As used herein, a "pixel map" is much like a "bitmap" except that multiple values are stored in the memory of the computer system 12 to corresponds to each pixel of the output device. For example, for each pixel on a greyscale or color video monitor, multiple numeric values are stored on the computer to correspond to the multiple greyscales levels for each of the video monitor's pixels.
It will be noted, however, that the imbalanced stem problem has reoccurred in greyscale output devices as a result of the "anti-aliasing" process that was designed to make curves smoother and diagonal lines less jagged by adjusting the greyscale levels of selected pixels on the output display. More particularly, stem 54a appears to be two pixels wide, while stems 54b and 54c appear to be about one pixel wide. Again, this stem imbalance phenomenon is quite apparent in small characters and reduces the quality of the output image.
It should be noted that while this discussion has centered on vertical stems, that the problem is equally apparent with horizontal stems. For example, while the example of the lower case "m" was given, this stem imbalancing problem is also apparent on letters such as an upper case "E." Furthermore, both vertical and horizontal "stems" or segments can be found in a single letter, such as the letter "o", which has two vertical side segments or stems, and two horizontal top and bottom segments or stems.
FIGS. 3A, 3B, and 3C are used to illustrate both vertical "stems" and horizontal "stems" on the same character "o." In FIG. 3A, coarse grid 56 is shown with the font outline 58 of a character "o" and with its resultant bitmap 60. It should be remembered that while the font outline 58 has been rendered as a high-resolution bitmap 60, the actual output device can only display at the resolution of the coarse grid 56, which is 1/4 the resolution of the high-resolution bitmap of this example.
As seen in FIG. 3B, this is not much of a problem with respect to a black-and-white output device. With such a device, the high-resolution bitmap 60 of FIG. 3A is converted into a coarse bitmap 62 which corresponds to the resolution of the output device. The coarse bitmap is aligned with the coarse grid such that the vertical stems 62a and 62b are of the same width, and such that the horizontal stems 64a and 64b are of the same width. As noted above, and in accordance with industry convention, a "stem" can be a portion of a curved letter, such as portions or segments of the letter "o." It should be further noted that the stems should be symmetrically balanced, and are not necessarily all of the same width. For example, in the Helvetica.TM. font, the vertical stems 62a and 62b are of a greater width than the horizontal stems 64a and 64b, in accordance with the design of the font developer. "Helvetica" is a trademark of Linotype AG and/or its subsidiaries.
In FIG. 3C, when anti-aliasing has been used to smooth the appearance of the letter "o", stem imbalancing is introduced. In particular, the horizontal stems 66a and 66b are quite different in width. In this particular example, the horizontal stems 68a and 68b are roughly balanced, although this is not always the case. It should also be noted that a portion of the greyscale pixel map 70 is below the "baseline" 72 for the character. This also has a distorting effect and should be avoided if possible.
Some attempt has been made by output device manufacturers to enhance the image provided to the output device as a bitmap or a pixel map. For example, certain Hewlett-Packard Company printers provide "image enhancement" which attempts to smooth "jagged" diagonal lines and to smooth curves. While generally useful, such post-rendering image enhancement mechanisms are not completely successful because the information that was used to create the bitmap or pixel map (e.g. the font outline) is not available to the output device. Therefore, post-rendering image enhancement cannot correct problems such as imbalanced stem widths, etc.